class DB{
    private $options=array(
         'database_type' => 'mysql',
            'database_name' => 'test',
            'server' => 'localhost',
            'username' => 'root',
         'password' => '',
            'charset' => 'utf8'
    );
    private $link;
    static private $instance=null;
    static $table;
    private function __construct(){    
        $this->db_connect();
        $this->db_setcharset();
    }
    static public function getInstance($table){
        if(!$table) exit('请输入要操作的数据表名');
        self::$table=$table;
        if (!self::$instance instanceof self) {
                     self::$instance = new self($config);
                }
             return self::$instance;
    }
    private function db_connect(){
        $options=$this->options;
            try {
                    $this->link = new mysqli($options['server'], $options['username'], $options['password'],$options['database_name']);
                }
            catch (Exception $e) {
                    die("数据库连接失败".$e);
            }
    }
    private function db_setcharset(){
        $options=$this->options;
        if (!$this->link->set_charset($options['charset'])) {
                printf("Error loading  : %s\n", $this->link->error);
        }
    }
    private function __clone(){
        die('禁止复制对象实例');
    }
    private function db_query($sql){
        $res=$this->link->query($sql);
        var_dump($sql);
        if(!$res) printf("命令错误: %s\n", $mysqli->error);
        return $res;
    }
    public function insert($data){
        $keys=join(",",array_keys($data));
        foreach ($data as $key => $value) {
            # code...
            $value=$this->link->escape_string($value);
        }
        $values="'".join("','",array_values($data))."'";
        $sql="INSERT INTO ".self::$table." ({$keys}) VALUES ({$values})";
        $res=$this->db_query($sql);
        return $this->link->affected_rows;
    }
    public function delete($where=null,$tag='and'){
        // $where=array("age<28")
        $condation=$this->dealWhere($where,$tag);
        $sql="delete from ".self::$table.($where==null?null:" where ". $condation);;
        $res=$this->db_query($sql);
        return $this->link->affected_rows;
    }
    private function dealWhere($where,$tag){
        if(is_array($where)&&count($where)>0){
            foreach ($where as $key => $value) {
                $condation.=' '.$value.' '.$tag;
            }
            $condation=trim($condation,$tag);
        }elseif(!empty($where)){
            $condation=$where;
        }else{
            $condation='';
        }
        return $condation;
    }
    public function update($data,$where=null,$tag='and'){
        // $where=array("age<28")
        $condation=$this->dealWhere($where,$tag);
        if(is_array($where)&&count($where)>0){
            foreach ($where as $key => $value) {
                $condation.=' '.$value.' '.$tag;
            }
            $condation=trim($condation,$tag);
        }elseif(!empty($where)){
            $condation=$where;
        }
        $values='';
        foreach ($data as $key => $value) {
            # code...
            echo $key;
            $value=$this->link->escape_string($value);
            $values.=$key."='".$value."',";
        }
        $values=trim($values,',');
        $sql="update  ".self::$table." set {$values}".($where==null?null:" where ". $condation);
        $res=$this->db_query($sql);
        return $this->link->affected_rows;
    }
    public function select($where=null,$filed='*',$tag='and',$order=null,$limit=null){
        $condation=$this->dealWhere($where,$tag);
        $sql="select  {$filed} from ".self::$table.($where==null?null:" where ". $condation).($order==null?null:" order by ". $order).($limit==null?null:" limit ". $limit);
        $res=$this->db_query($sql);
        $rows=[];
         while ($row = $res->fetch_assoc()) {
                    $rows[]=$row;
                }
        return $rows;  
    }
 
}
header('content-type:text/html;charset=utf-8');
$db=DB::getInstance('user');
//$insert_id=$db->update(array('username'=>'hello','age'=>30),'id=14');
$rows=$db->select('id>2','*','and',null,'4');
var_dump($rows);